package com.yunsc.order.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yunsc.order.dto.QueryOrderDTO;
import com.yunsc.order.entity.YunscOrderEntity;
import com.yunsc.order.vo.OrderDetailVO;
import com.yunsc.order.vo.OrderTradeTrendVO;
import com.yunsc.order.vo.OverviewVO;
import com.yunsc.order.vo.UserExpendRankingVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 订单记录表
 *
 * @author adan
 * @email 2028038953@qq.com
 * @date 2024-04-22 11:35:51
 */
@Mapper
public interface YunscOrderDao extends BaseMapper<YunscOrderEntity> {

    /**
     * 查询订单列表
     *
     * @param page    分页对象
     * @param params  查询参数
     * @param storeId 门店ID
     * @return 订单列表
     */
    Page<OrderDetailVO> selectOrderList(
            Page<OrderDetailVO> page,
            @Param("params") QueryOrderDTO params,
            @Param("startTime") Integer startTime,
            @Param("endTime") Integer endTime,
            @Param("storeId") Integer storeId
    );

    /**
     * 查询用户订单列表
     *
     * @param page         分页对象
     * @param dataType     数据类型
     * @param userId 当前用户ID
     * @return 用户订单列表
     */
    Page<OrderDetailVO> selectUserOrderList(Page<OrderDetailVO> page, @Param("dataType") String dataType, @Param("userId") Integer userId);

    /**
     * 获取近七日交易走势
     *
     * @param storeId 门店ID
     * @return 订单详情
     */
    List<OrderTradeTrendVO> getTradeTrendItems(Integer storeId);

    /**
     * 查询订单总数
     * @param storeId  门店ID
     * @return 订单总数
     */
    @Select("SELECT SUM(pay_price) FROM yunsc_order WHERE store_id = #{storeId} and order_status != 20 and pay_status = 20")
    String querySalesTotal(@Param("storeId") Integer storeId);

    /**
     *  查询用户支出排行
     * @param storeId 门店ID
     * @return 用户支出排行
     */
    List<UserExpendRankingVO> selectUserExpendRanking(Integer storeId);

    /**
     * 查询概览数据
     *
     * @param startInSeconds 开始时间
     * @param endInSeconds 结束时间
     * @param storeId 门店ID
     * @return
     */
    OverviewVO selectOverviewByDate(@Param("startInSeconds") int startInSeconds, @Param("endInSeconds") int endInSeconds, @Param("storeId") Integer storeId);
}
